#include <iostream>
#include <thread>
#include <mutex>

using std::cout;
using std::endl;
using std::mutex;
using std::thread;
using std::lock_guard;
using std::unique_lock;

int gCnt = 0;
mutex mt;

void threadfunc1(){
    for(int i =0;i < 10000;++i){
        mt.lock();
        ++gCnt;//先找到上一次的gCnt,然后++，最后返回++之后的结果
        mt.unlock();
    }

}

void threadfunc2(){
    for(int i =0;i < 1000;++i){
        {        
            lock_guard<mutex> lg(mt);
            ++gCnt;//先找到上一次的gCnt,然后++，最后返回++之后的结果
        }
        cout << "111111"<<endl;
    }
}

void threadfunc3(){
    for(int i =0;i < 10000;++i){
        unique_lock<mutex> ul(mt);
        ++gCnt;//先找到上一次的gCnt,然后++，最后返回++之后的结果
        ul.unlock();//这一步写不写都不影响
    }

}

int main()
{
    thread th1(threadfunc3);
    thread th2(threadfunc3);

    th1.join();
    th2.join();

    cout << " gCnt = " << gCnt << endl;
    return 0;
}

